package com.pllandxzx.service.impl;

import com.alibaba.fastjson.JSON;

import com.pll.pojo.Admin;
import com.pll.util.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.concurrent.TimeUnit;

/**
 * @ClassName：AuthService
 * @Author: 阿⭐
 * @Date: 2025/6/10 11:31
 * @Description: TODO
 */
@Service
public class AuthService {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    // Token 过期时间（秒）
    private static final long TOKEN_EXPIRE_TIME = 3600; // 1 小时

    /**
     * 用户登录，生成 token 并存入 Redis
     */
    public HashMap<String, Object> getToken(Admin admin) {
        HashMap<String,Object> map = new HashMap<String,Object>();
        //放入唯一id，保证生成token唯一
        map.put("id",admin.getId());
        // 生成唯一 token（可替换为 JWT）
        String token = JwtUtils.generateJwt(map);
        Object s = redisTemplate.opsForValue().get(token);
        if (s == null){
            // 存储到 Redis，键为token，值为用户信息（序列化为 JSON）
            redisTemplate.opsForValue().set(
                    token,
                    admin,
                    TOKEN_EXPIRE_TIME,
                    TimeUnit.SECONDS
            );
        }
        //将token和用户数据写到map里面一起返回给前端
        HashMap<String,Object> data = new HashMap<String, Object>();
        data.put("token",token);
        data.put("admin",admin);
        System.out.println(data);
        return data;
    }


//    /**
//     * 验证 token 并返回用户信息
//     */
//    public Admin validateToken(String token) {
//        String userJson = redisTemplate.opsForValue().get("token:" + token);
//        if (StringUtils.isEmpty(userJson)) {
//            throw new RuntimeException("Token is invalid or expired");
//        }
//        // 可选：续期 token
//        redisTemplate.expire("token:" + token, TOKEN_EXPIRE_TIME, TimeUnit.SECONDS);
//        //返回值将userJson解析为admin类
//        return JSON.parseObject(userJson, Admin.class);
//    }

    /**
     * 登出，删除 token
     */
    public void logout(String token) {
        redisTemplate.delete("token:" + token);
    }
}

